# 字典由 键-值 对组成, 这种 键-值 对成为项
phonebook = {
    'aa': 15036000000,
    'bb': 13938000000
}
print(phonebook)

# dict 函数
# 从其他映射 或者 键值对序列创建字典
items = [('name', 'zb'), ('age', 18)]
print(dict(items))


"""
基本字典操作
"""

# len[d]
print(len(phonebook))
# d[k]
print(phonebook['bb'])
# d[k] = v
phonebook['cc'] = 1234567890
print(phonebook)
# del d[k]
del phonebook['bb']
print(phonebook)
# k in d
print('aa' in phonebook)

"""
字典方法
"""

# 1. clear
# 删除所有字典项
phonebook.clear()
print(phonebook)

# 2. copy
# 返回一个新字典
x = {'username': 'admin', 'machines': ['foo', 'bar', 'baz']}
y = x.copy()
x.clear()
print(x, y)

# 3. fromkeys
# 创建一个新字典, 其中包含指定键, 但是对应的值都为 None
print({}.fromkeys(['a', 'b', 'c']))
print({}.fromkeys(['a', 'b', 'c'], 1))

# 4. get
# get访问字典项不会报错
print(y.get('aaa'))
print(y.get('username'))

# 5. items
# 返回一个包含所有字典项的列表, 每个元素都为(key, value)的形式
# 返回值属于一种名为 字典视图 的特殊类型
print(y.items())

# 6. keys
# 返回一个字典视图，其中包含指定字典中的键
print(y.keys())

# 7. pop
# 获取指定键值关联对, 并从字典删除
a = {1: 10, 2: 20, 3: 30}
print(a.pop(1), a)

# 8. popitem
# 类似于 list.pop 但是 list.pop是弹出最后一个项, 而 dist.popitem随机弹出一个项, 因为字典顺序不确定, 没有最后一个元素这个概念
print(a.popitem())

# 9. setdefault
# 获取指定键值对, 没有时候添加
z = {1: 1000}
print(z.setdefault(1, 2000), z)
print(z.setdefault(2, 2000), z)

# 10. update
# 使用一个字典来更新另一个字典
d = {
    'title': 'Python Web Site',
    'url': 'https://www.python.org',
    'changed': 'Mar 14 22:09:15 MET 2016'
}
e = {
    'title': 'Python study',
    'other': '......'
}
d.update(e)
print(d)

# 11. values
# values 生成一个组成一个字典视图
print(d.values())



